package savet.gui.modelos;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import savet.entidades.atributos.Periodo;

/**
 *
 * @author Adisson Marinho
 */
public class ModeloListaPeriodos extends AbstractTableModel {

    private static final String[] colunas = {"De", "Ate"};
    private List<Periodo> periodos = new LinkedList<Periodo>();

    public void adicionarPeriodo(Periodo periodo) {
        if (!periodos.contains(periodo)) {
            int index = periodos.size();
            periodos.add(periodo);
            fireTableRowsInserted(index, index);
        }
    }

    public void removerPeriodo(Periodo periodo) {
        int index = periodos.size();
        periodos.remove(periodo);
        fireTableRowsDeleted(index, index);
    }

    public void removerPeriodo(int selectedRow) {
        periodos.remove(selectedRow);
        fireTableRowsDeleted(selectedRow, selectedRow);
    }

    public int getRowCount() {
        return periodos.size();
    }

    public int getColumnCount() {
        return colunas.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        Periodo periodo = periodos.get(rowIndex);
        return columnIndex == 0 ? periodo.getDataInicio() : periodo.getDataFim();
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Periodo periodo = periodos.get(rowIndex);
        Date date = (Date) aValue;
        if (columnIndex == 0) {
            periodo.setDataInicio(date);
        } else {
            periodo.setDataFim(date);
        }
        fireTableCellUpdated(rowIndex, columnIndex);
    }

    public void setPeriodo(Periodo periodo) {
        int index = -1;
        for (int i = 0;i < periodos.size() ; i++) {
            Periodo p = periodos.get(i);
            if (p == periodo) {
                index = i;
                break;
            }
        }
        System.out.println("index = " + index);
        if (index != -1) {
            setPeriodo(index, periodo);
        }
    }

    protected void setPeriodo(int row, Periodo periodo) {
        setValueAt(periodo.getDataInicio(), row, 0);
        setValueAt(periodo.getDataFim(), row, 1);
        periodos.set(row, periodo);
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return Date.class;
    }

    @Override
    public String getColumnName(int column) {
        return colunas[column];
    }

    public List<Periodo> getPeriodos() {
        return periodos;
    }

    public void setPeriodos(List<Periodo> periodos) {
        this.periodos = periodos;
        fireTableRowsUpdated(0, this.periodos.size());
    }

    public Periodo getPeriodo(int index) {
        return periodos.get(index);
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }


}
